places view: Stop using ::button-press-event
authorMatthias Clasen <mclasen@redhat.com>
Mon, 8 Jan 2018 01:40:11 +0000 (20:40 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 16 Jan 2018 19:14:10 +0000 (14:14 -0500)
Instead, use a multi-press gesture in the row widget,
and emit ::popup-menu from there.

gtk/gtkplacesview.c
gtk/gtkplacesviewrow.c

index 3281a09794c2c56ba1fd59a2d8d11adc37ebb79f..2451f114ddbd22c60a95fd6ce0a3f34e0c0ab6a2 100644 (file)
@@ -99,9 +99,6 @@ struct _GtkPlacesViewPrivate
 static void        mount_volume                                  (GtkPlacesView *view,
                                                                   GVolume       *volume);
 
-static gboolean    on_button_press_event                         (GtkPlacesViewRow *row,
-                                                                  GdkEventButton   *event);
-
 static void        on_eject_button_clicked                       (GtkWidget        *widget,
                                                                   GtkPlacesViewRow *row);
 
@@ -662,15 +659,7 @@ insert_row (GtkPlacesView *view,
 
   g_object_set_data (G_OBJECT (row), "is-network", GINT_TO_POINTER (is_network));
 
-  g_signal_connect_swapped (GTK_PLACES_VIEW_ROW (row),
-                            "button-press-event",
-                            G_CALLBACK (on_button_press_event),
-                            row);
-
-  g_signal_connect (row,
-                    "popup-menu",
-                    G_CALLBACK (on_row_popup_menu),
-                    row);
+  g_signal_connect (row, "popup-menu", G_CALLBACK (on_row_popup_menu), row);
 
   g_signal_connect (gtk_places_view_row_get_eject_button (GTK_PLACES_VIEW_ROW (row)),
                     "clicked",
@@ -1697,22 +1686,6 @@ on_row_popup_menu (GtkPlacesViewRow *row)
   return TRUE;
 }
 
-static gboolean
-on_button_press_event (GtkPlacesViewRow *row,
-                       GdkEventButton   *event)
-{
-  if (row &&
-      gdk_event_triggers_context_menu ((GdkEvent*) event) &&
-      gdk_event_get_event_type ((GdkEvent *)event) == GDK_BUTTON_PRESS)
-    {
-      popup_menu (row, event);
-
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
 static gboolean
 on_key_press_event (GtkWidget     *widget,
                     GdkEventKey   *event,
index c7236afd1bf466133eccc133a53f3b2d84223d15..c64c0635237e0ebed9d35aaf5c1be02747c58215 100644 (file)
@@ -34,6 +34,7 @@
 #include "gtkspinner.h"
 #include "gtkstack.h"
 #include "gtktypebuiltins.h"
+#include "gtkgesturemultipress.h"
 #else
 #include <gtk/gtk.h>
 #endif
@@ -55,6 +56,8 @@ struct _GtkPlacesViewRow
   GMount        *mount;
   GFile         *file;
 
+  GtkGesture    *gesture;
+
   GCancellable  *cancellable;
 
   gint           is_network : 1;
@@ -192,6 +195,16 @@ measure_available_space (GtkPlacesViewRow *row)
     }
 }
 
+static void
+pressed_cb (GtkGesture       *gesture,
+            int               n_pressed,
+            double            x,
+            double            y,
+            GtkPlacesViewRow *row)
+{
+  g_signal_emit_by_name (row, "popup-menu", 0);
+}
+
 static void
 gtk_places_view_row_finalize (GObject *object)
 {
@@ -203,6 +216,7 @@ gtk_places_view_row_finalize (GObject *object)
   g_clear_object (&self->mount);
   g_clear_object (&self->file);
   g_clear_object (&self->cancellable);
+  g_clear_object (&self->gesture);
 
   G_OBJECT_CLASS (gtk_places_view_row_parent_class)->finalize (object);
 }
@@ -384,6 +398,10 @@ static void
 gtk_places_view_row_init (GtkPlacesViewRow *self)
 {
   gtk_widget_init_template (GTK_WIDGET (self));
+
+  self->gesture = gtk_gesture_multi_press_new (GTK_WIDGET (self));
+  gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (self->gesture), GDK_BUTTON_SECONDARY);
+  g_signal_connect (self->gesture, "pressed", G_CALLBACK (pressed_cb), self);
 }
 
 GtkWidget*